/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package compilador.analisadorSintatico.classe;

import compilador.analisadorLexico.Token;
import compilador.analisadorLexico.TokenClass;
import compilador.analisadorSintatico.Producao;
import compilador.analisadorSintatico.TokenReader;
import compilador.analisadorSintatico.metodos.ATRIBUIR_VALOR;
import compilador.analisadorSintatico.simboloGramatical.NaoTerminal;
import compilador.analisadorSintatico.simboloGramatical.SimboloGramatical;
import compilador.analisadorSintatico.simboloGramatical.Terminal;

/**
 *
 * @author Matheus Cardoso
 */
public class DEC_CONSTANTE extends Producao{

    @Override
    public void setSimbolo() {
        this.simbolo = new NaoTerminal("DEC_CONSTANTE");
    }
    
    @Override
    public SimboloGramatical derivar() throws Exception {
        TokenReader tokenReader = TokenReader.getInstance();
        
        Token token = null;
        Token next = null;
 
        NaoTerminal naoTerminal = (NaoTerminal) this.simbolo;
        
        token = tokenReader.seeCurrent();
        if(token.getTokenClass().equals(TokenClass.PALAVRA_RESERVADA) && token.getAtributo().toString().equals("const")){
            
            tokenReader.consome();
            naoTerminal.add(new Terminal(token));
            
        } else{
            erro(this.getClass().getSimpleName() + " mal formada - 'const' nao encontrado");
            return this.simbolo;
        }
        
        naoTerminal.add(new TIPO_PRIMITIVO().derivar());
        
        token = tokenReader.seeCurrent();
        naoTerminal.add(new NOME().derivar());
        
        token = tokenReader.seeCurrent();
        naoTerminal.add(new ATRIBUIR_VALOR().derivar());
        
        token = tokenReader.seeCurrent();
        if(token.getTokenClass().equals(TokenClass.DELIMITADOR) && token.getAtributo().equals(";")){
            tokenReader.consome();
            naoTerminal.add(new Terminal(token));
        } else {
            erro(this.getClass().getSimpleName() + " mal formada - ';' nao encontrado");
        }
        
        return naoTerminal;
    }

}
